import global from '@/common/config.js'
import store from './store'
const msg = (title) => {
	if(!title)return
	uni.showToast({
		title,
		position: 'center',
		icon: "none"
	})
}
const config = { //请求配置
	baseUrl: global.baseUrl, // 请求的本域名
	method: 'POST', //默认请求方式
	dataType: 'json', // 设置为json，返回后会对数据进行一次JSON.parse()
	showLoading: true, // 是否显示请求中的loading
	loadingTime: 800, // 在此时间内，请求还没回来的话，就显示加载中动画，单位ms 默认200
	loadingMask: false, // 展示loading的时候，是否给一个透明的蒙层，防止触摸穿透 默认 false
	loadingText: '加载中~', // 请求loading中的文字提示
}
let timerJump = true //短时间内只跳转一次
let timerloading = '' //定时器
let request = (url = '', data = {}, method = config.method) => {
	return new Promise((resolve, reject) => {
		if (!url) return resolve()
		if (config.showLoading) { //是否显示加载中动画
			clearTimeout(timerloading)
			timerloading = setTimeout(() => { //延迟加载动画
				uni.showLoading({
					mask: config.loadingMask || false, //展示loading的时候，是否给一个透明的蒙层
					title: config.loadingText || '', //文字提示
					success() {
						uni.$once('hideLogin', e => uni.hideLoading()) //如果接口成功则隐藏加载
					}
				})
			}, config.loadingTime || 200) //延迟加载动画200ms
		}
		url[0] == '/' ? '' : url = '/' + url //判断url前面是否带/
		let token = store?.state?.token || uni.getStorageSync('token') || ''
		let shopToken = global.shopToken
		let myAdd = store?.store?.myAdd || uni.getStorageSync('myAdd') || ''
		uni.request({
			url: config.baseUrl + url,
			method,
			data,
			dataType: config.dataType || 'json',
			header: {
				'content-type': 'application/json;charset=UTF-8', // JSON数据格式
				Authorization: token, // token
				token: shopToken, // token
				cityid:myAdd.id,
				// shopId:0,
				// type:'user',
				// 'content-Type': 'application/x-www-form-urlencoded',
				// <form encType=””>中默认的encType，form表单数据被编码为key/value格式发送到服务器（表单默认的提交数据的格式
			},
			success(resData) {
				if (resData.statusCode != 200) {
					msg('statusCode:' + resData.statusCode)
				}
				let res = resData.data
				if (res.page) jump(res.page) //跳转
				if (res.code == 1||res.code==100) {
					return resolve(res)
				} else if (res.code == 2) { //正确且提示
					msg(res.msg) //提示
					return resolve(res)
				} else if (res.code == 401) {
					if (timerJump) {
						timerJump = false
						login(res)
					}
					reject(res)
				} else if (res.code == 0) {
					msg(res.msg) //返回错误信息
					reject(res)
				} else {
					console.error('未识别code 不做处理的数据')
					reject(resData)
				}
			},
			fail(err) {
				// console.error('服务返回错误 request:fail 错误信息:', err)
				reject(err)
			},
			complete(res) {
				clearTimeout(timerloading)
				uni.$emit('hideLogin', '')
			},
		})
	})
}
export default request

let jump = (url) => { //根据后端传参进行跳转
	setTimeout(() => {
		if (url == 'back') return uni.navigateBack()
		uni.navigateTo({
			url,
			fail() {
				uni.switchTab({
					url
				})
			}
		})
	}, 800)
}

// uni.addInterceptor('request', { //请求拦截器
// 	invoke(args) { //请求前拦截
// 		if (args.url.indexOf('/preliminary/Coach/add_coach') != -1) {
// 			args.header['content-Type'] = 'application/json;charset=UTF-8'
// 		}
// 	},
// 	success(res) { //成功后拦截
// 	},
// 	fail(err) {
// 		// console.log(err);
// 	},
// 	complete() {
// 	}
// })

let login = (res) => { //401后
	store.commit('setToken', '') ///清除token
	// 就去登录页
	store.dispatch('chat/close');
	// 小程序静默登录
	// #ifdef MP-WEIXIN
	uni.login({
		provider: 'weixin',
		success: res => {
			console.log(res);
			apiLogin(res.code)
		},
		complete: () => {
			setTimeout(() => {
				timerJump = true
			}, 2000)
		}
	});
	return
	// #endif
	msg(res.msg)
	setTimeout(() => {
		uni.navigateTo({
			url: "/pages/public/login",
			complete() {
				timerJump = true
			}
		})
	}, 1000)
	return
}
let apiLogin = (code = '') => { //小程序静默登录
	request('/member/login/wxapp_login', {
		code,
		regcode: uni.getStorageSync('regcode') || ''
	}).then(res => {
		let pages = getCurrentPages()
		let page = pages[pages.length - 1].$vm
		page.$login_success(res)//登录成功
	})
}


//防止重新跳转
// uni.addInterceptor('navigateTo', {
// 	invoke(e) {
// 		//登录不让重复跳转
// 		if (e.url.indexOf('pages/public/login') != -1) {
// 			let pages = getCurrentPages()
// 			let page = pages[pages.length - 1]
// 			let path = page.route
// 			if (path.indexOf('pages/public/login') != -1) {
// 				return false
// 			}
// 		}
// 	},
// })
